/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.model;

/**
 *
 * @author Jack
 */
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Biblioteca {

	private String nome;
        private int codigo;
	private ArrayList<Livro> livros;
	private ArrayList<Pessoa> pessoas;
        private static int gerCod = 1;

	public Biblioteca(String nome) {
		this.nome = nome;

		livros = new ArrayList<Livro>();
		pessoas = new ArrayList<Pessoa>();
                this.codigo = gerCod++;
	}

	public String getNome() {
		return nome;
	}

    public void setNome(String nome) {
        this.nome = nome;
    }
        

	public ArrayList<Livro> getLivros() {
		return livros;
	}

	public ArrayList<Pessoa> getPessoas() {
		return pessoas;
	}

        public void setLivros(ArrayList<Livro> livros) {
            this.livros=livros;
       }

       public void  setPessoas(ArrayList<Pessoa> pessoas) {
          this.pessoas=pessoas;
       }

       public void addLivro(Livro l1) {

           this.livros.add(l1);

           }                       

	public void removeLivro(Livro l1) {

		this.livros.remove(l1);

	}

	public void addPessoa(Pessoa p1) {

		this.pessoas.add(p1);
	}

	public void removePessoa(Pessoa p1) {

		this.pessoas.remove(p1);
	}

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

	public boolean emprestimo(Livro l1, Pessoa p1) {
		int livrosEmprestadoss = this.getLivrosPorPessoa(p1).size();
		if ((l1.getPessoa() == null)
				&& (livrosEmprestadoss < p1.getMaxLivros())) {
			l1.setPessoa(p1);
                        int x = this.livros.indexOf(l1);
                        livros.get(x).setPessoa(p1);
			return true;
		}

		else {
                    JOptionPane.showMessageDialog(null, "Emprestimo não autorizado");
			return false;
		}
	}

	public boolean devolucao(Livro l1) {

		if (l1.getPessoa() != null) {
              
			l1.setPessoa(null);
			return true;
		}

		else {
			return false;
		}
	}

	public ArrayList<Livro> getLivrosPorPessoa(Pessoa p1) {

		ArrayList<Livro> resultado = new ArrayList<Livro>();

		for (Livro umLivro : this.getLivros()) {
			if ((umLivro.getPessoa() == p1)
					&& (umLivro.getPessoa().getNome().equals(p1.getNome())))
				resultado.add(umLivro);

		}
		return resultado;
	}

	public ArrayList<Livro> getLivrosDisponiveis() {

		ArrayList<Livro> resultado = new ArrayList<Livro>();

		for (Livro umLivro : this.getLivros()) {
			if (umLivro.getPessoa() == null)
				resultado.add(umLivro);

		}
		return resultado;

	}
        
        public ArrayList<Livro> getLivrosIndisponiveis() {

		ArrayList<Livro> resultado = new ArrayList<Livro>();

		for (Livro umLivro : this.getLivros()) {
			if (umLivro.getPessoa() != null)
				resultado.add(umLivro);

		}
		return resultado;

	}

	public String toString() {

		return this.getNome() + "Possui : " + this.getLivros().size() + " livros; "
				+ this.getLivrosDisponiveis().size() + " Disponiveis.";

	}

	public String imprimeStatus() {
           String tudo;
		tudo = "Status da minha Biblioteca \n" + this.toString();
            //   tudo += System.getProperty("line.separator"); // pular linha 

		for (Livro umlivro : this.getLivros()) {
			tudo += "\n" + umlivro;
		}

		for (Pessoa umaPessoa : this.getPessoas()) {
			int contador = this.getLivrosPorPessoa(umaPessoa).size();
			tudo += "\n" +umaPessoa + " (tem " + contador
					+ " dos meus livros)";
		}

		tudo += "\n" +  "Livros disponíveis:" + this.getLivrosDisponiveis().size();

		tudo += "\n" +" --- Fim do Status ---\n\n";
              //  System.out.println(tudo);
                return tudo;
	}

	/*
	public static void main(String[] args) {

		// Cria uma nova biblioteca

		Biblioteca testeBiblioteca = new Biblioteca("UFPB");
		Livro l1 = new Livro("O principe e o pobre");
		l1.setAutor("Mark Twain");
		Livro l2 = new Livro("O livro dos cinco elementos");
		l2.setAutor("Myamoto Musashi");

		Pessoa p1 = new Pessoa();
		p1.setNome("Lisa Simpsn");

		Pessoa p2 = new Pessoa();
		p2.setNome("Bart Simpson");

		testeBiblioteca.addLivro(l1);
		testeBiblioteca.addLivro(l2);
		testeBiblioteca.addPessoa(p1);
		testeBiblioteca.addPessoa(p2);

		System.out.println("Criada a nova biblioteca");
		testeBiblioteca.imprimeStatus();

		testeBiblioteca.emprestimo(l1, p1);
		System.out.println("Emprestado O principe e o pobre para Lisa Simpson");
		testeBiblioteca.imprimeStatus();

		System.out.println("Faz mais alguma coisa");

		testeBiblioteca.devolucao(l1);
		testeBiblioteca.emprestimo(l2, p2);
		testeBiblioteca.imprimeStatus();

	}*/

}
